iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

Batch Mesh是利用程式,根據設定自動完成mesh的功能(註1)。

乍聽之下是個萬靈丹,全部CAD都拿來batch mesh,是不是就可以不用建網格了。
很抱歉的是,您想要的是一個AI版的batch mesh,目前各家廠商可能都還在開發中?

實務上,batch mesh適合用在簡單幾何或是每次幾何pattern都差不多的零件。

  • 簡單幾何容易mesh,不易發生失敗,相信不用多做解釋。
  • 幾何pattern如果可以掌握,我們就可以使用batch mesh對特徵萃取功能,來找出孔洞、凸包或折邊等特徵。

由於特徵萃取是個比較複雜的主題,我們只打算用一天的篇幅來介紹batch mesh,所以只好忍痛割捨了,或許留待明年鐵人賽再跟大家分享?

核心概念

batch mesh的設定檔為ansa_mparansa_qual兩個檔案。ANSA會讀取這兩個檔案,並盡力做出滿足條件的網格。

ansa_mpar是包含網格所需參數的設定檔,而ansa_mpar是包含網格所需滿足品質的設定,兩者都可以從GUI介面產生。這裡我們分別產生surface.ansa_mparsurface.ansa_qual兩個檔,並置於當前目錄。

下面的程式則分別將surface.ansa_mparsurface.ansa_qual指定給surface_mpar_strsurface_qual_str兩個變數。

#batchmesh_surf.py
surface_mpar_str = 'surface.ansa_mpar'
surface_qual_str = 'surface.ansa_qual'

幾何修復

我們先利用base.Open,讀取同一資料夾的CAD檔surface.igs,CAD檔案內是含有一個洞的surface

在進行batch mesh前,我們可以對CAD先進行幾何的修復。

首先,我們可以考慮使用base.Topobase.Topo是一個裁縫師,可以將一些微小的誤差區域修補起來,成為較大塊而可以建立網格的區域。

接著,我們使用base.CheckAndFixGeometry來真正修復幾何。base.CheckAndFixGeometry一般需要三個參數,分別是inputoptionsfix_options

input是所需修復的EntityEntities,我們這邊使用base.CollectEntities收集所有face

options參考手冊共有:

  • UNMESHED MACROS
  • UNCHECKED FACES
  • NEEDLE FACES
  • COLLAPSED CONS
  • TRIPLE CONS
  • OVERLAPS
  • CRACKS
  • SINGLE CONS
  • SHARP EDGES

我們選了六種來使用。

fix_options是代表要不要真的使用相對應位置的options1代表要,2代表不要。我們因為已經選好了六種,所以全都給1(小孩子才做選擇,我們全都要)。

#batchmesh_surf.py
cad_file = 'surface.igs'
r = base.Open(cad_file)

# topo
base.Topo(cons='all')

# geometry fix
print(f'Running geometry fix...')
options = ["CRACKS",
           "OVERLAPS",
           "NEEDLE FACES",
           "COLLAPSED CONS",
           "UNCHECKED FACES",
           "UNMESHED MACROS"]
options = [1, 1, 1, 1, 1, 1]
faces = base.CollectEntities(deck, None, 'FACE')
ret = base.CheckAndFixGeometry(faces, options, fix, True, True)
print(f'Geometry fixed')

Scenario

Scenario是一種container,裡面可以添加多個Session,每個session可以有自己的ansa_mparansa_qual檔。這麼一來我們可以將不同的part甚至不同種類的幾何拆到不同的session,透過ansa_mparansa_qual的設定,達成更細微的控制。

這裡我們

  • 透過batchmesh.GetNewMeshingScenario建立了一個新scenarioscenario名為01_senario,變數名為scenario1
  • 透過batchmesh.GetNewSession建立了一個新sessionsession名為01_surface ,變數名為surface_sess
  • 透過batchmesh.ReadSessionMeshParams讀取surface_mpar_strsurface_sessansa_mpar檔。
  • 透過batchmesh.ReadSessionQualityCriteria讀取surface_qual_strsurface_sessansa_qual檔。
  • 建立一個sessionslist承載surface_sess
  • 透過batchmesh.AddSessionToMeshingScenariosessions加入到scenario1中。
#batchmesh_surf.py
print(f'Running batch meshing...')
scenario1 = batchmesh.GetNewMeshingScenario('01_senario')
surface_sess = batchmesh.GetNewSession('01_surface')
surface_mpar = batchmesh.ReadSessionMeshParams(
    surface_sess, surface_mpar_str)
surface_qual = batchmesh.ReadSessionQualityCriteria(
    surface_sess, surface_qual_str)
sessions = [surface_sess]
batchmesh.AddSessionToMeshingScenario(sessions, scenario1)

Session

這裡我們透過老朋友base.GetEntity取得PID1Entity,即surface.igs內的surface,接著透過batchmesh.AddPartToSessionsurface加進surface_sess

#batchmesh_surf.py
surface = base.GetEntity(deck, LSDYNAType.PROPERTY, 1)
batchmesh.AddPartToSession(surface, surface_sess)

Run

最後透過batchmesh.RunMeshingScenario來執行scenario1(註2)。

#batchmesh_surf.py
batchmesh.RunMeshingScenario(scenario1)

可以點選下圖,觀看此script執行batch mesh的過程。

surface-batchmesh

備註

註1:Batch Mesh並不是ANSA的獨家武器,許多前處理也擁有類似的功能。
註2: 如果你有多個scenario,不想一個一個執行,可以考慮使用batchmesh.RunAllMeshingScenarios

Code

本日程式碼傳送門


上一篇
[Day23] - Streamlit WSL2 LS-DYNA Job Submitter - stem(2)
下一篇
[Day25] - 建立Solid Element的Segment(1)
系列文
或躍在淵的CAE: 讓咱們用Python會一會ANSA + LS-DYNA30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言